package controle;

import conexao.ConectEvent;
import conexao.TratadorConexao_Cliente;
import java.awt.event.ActionEvent;
import java.awt.event.WindowEvent;
import java.io.IOException;
import javax.swing.JMenu;
import javax.swing.JOptionPane;
import javax.swing.event.MenuEvent;
import dao.DAO;
import util.Constantes;
import visao.FabricaDeDialog;
import visao.SadGUI_Cliente;

public class MasterControl extends AbstractControl {

  private SadGUI_Cliente v_geral;

  public void run() {
    v_geral = new SadGUI_Cliente(this);
    v_geral.setLocationRelativeTo(null);
    v_geral.setVisible(true);

    addOuvinte();
   //TratadorConexao.conectar();
  }

  // <editor-fold defaultstate="collapsed" desc="Responde a eventos com origem nas visões">
  @Override
  public void actionPerformed(ActionEvent e) {
    if (e.getActionCommand().equals(Constantes.PREFERENCIAS)) {
      FabricaDeDialog.criarDialog(v_geral, "Preferencias", null);
    } else if (e.getActionCommand().equals(Constantes.INICIAR)) {
      String [] s = {"Conectar"};
      FabricaDeDialog.criarDialog(v_geral, "Preferencias", s);
//      conectar();
    } else if (e.getActionCommand().equals(Constantes.FECHAR)) {
      sleep();
    } else if (e.getActionCommand().equals(Constantes.ENVIAR)) {
      enviarMSG();
    } else if (e.getActionCommand().equals(Constantes.SAIR)) {
      desconectar();
      closeWindow();
    }
  }

  @Override
  public void windowClosing(WindowEvent e) {
    if (e.getID() == WindowEvent.WINDOW_CLOSING) {
      closeWindow();
    }
  }

  @Override
  public void menuSelected(MenuEvent e) {
    if (((JMenu) e.getSource()).getActionCommand().equals("Sair")) {
      closeWindow();
    }
  }// </editor-fold>

  // <editor-fold defaultstate="collapsed" desc="Enchaminha eventos com origem na conexao">
  @Override
  public void conectChange(ConectEvent e) {
    v_geral.modelConectChange(e);
  }// </editor-fold>

  private void desconectar() {
    try {
      TratadorConexao_Cliente.desconectar();
    } catch (IOException ex) {
      
    }
  }

  private void addOuvinte() {
    v_geral.addActionListener(this);
    v_geral.addWindowOuvinte(this);
    v_geral.addMenuOuvinte(this);
    TratadorConexao_Cliente.getInstance().addConectOuvinte(this);
  }

  private void closeWindow() {
    int option = JOptionPane.showConfirmDialog(v_geral, "Desejar sair?",
            null, JOptionPane.OK_CANCEL_OPTION);
    if (option == 0) {
      v_geral.close();
    }
  }

  private void sleep() {
    try {
      TratadorConexao_Cliente.sleep();
    } catch (IOException ex) {
      
    }
  }

  private void enviarMSG() {
    String msg = v_geral.getMSG();
    TratadorConexao_Cliente.enviarMSGAll(msg);
  }
}
